學習到現在大家一定累積很多的程式碼或是各式的檔案,如何去做有效的控管其實是非常重要!
想像有個情境是你上線了一段程式碼,但顧客抱怨使用上有問題,你需要緊急還原到上一版,這是就可以靠 Git 來協助你進行程式碼或檔案版控,快速還原上一版,就不用急忙打電話給同事找程式碼。我們可以利用 Git 指令將程式碼每次的版本記錄起來,當哪一天需要回頭檢視的時候就可以直接查看。
brew install git
由於 Git 指令是打在終端機,因此有必要認識一下基本的終端機指令。
以下指令在 MacOs 與 Linux 通用
指令 | 說明 | 範例 |
---|---|---|
cd | change directory 切換目錄 | cd 目錄 |
cd | change directory 切換上一層 | cd .. |
tab | 系統提示該指令 | (需搭配其他指令,例如 cd 搭配 tab 可以直接看到可以切換目錄) cd (按tab) |
ls | list 列出目錄有的檔案 | -l 顯示完成檔案權限(可不加) -a 顯示.開頭的檔案(可不加) ls -al |
mkdir | make directory建立一個資料夾 | mkdir 資料夾名稱 |
cp | copy 複製檔案或資料夾 | -r 代表是資料夾操作(可不加) cp -r 原檔案或資料夾路徑 新檔案或資料夾路徑 |
rm | remove 刪除檔案或資料夾 | -r 代表是資料夾操作(可不加) rm -r 檔案或資料夾路徑 |
mv | move 移動或重新命名 | (1) 將檔案由 oldfile.txt 更名為 newfile.txt,所在目錄不變: mv ./oldfile.txt ./newfile.txt (2) 將檔案 ./dir1/filename.txt 移動到 ./dir2/ 目錄下,檔案名稱不變: mv ./dir1/filename.txt ./dir2/ |
pwd | print working directory 顯示目前路徑 | pwd |
crtl+c | 強制停止目前指令執行 | |
cat | concatenate 由第一行開始顯示檔案內容 | cat 檔案 |
tac | 由最後一行開始顯示檔案內容 | tac 檔案 |
more | 一頁一頁顯示檔案內容 | more 檔案 |
less | 與more相似,此指令可以往前翻頁 | less 檔案 |
鳥哥的 Linux 私房菜-第六章、Linux 檔案與目錄管理
設定帳號名稱和信件
$ git config --global user.name "your github id"
$ git config --global user.email "your email@gmail.com"
查看設定的資訊,按Q可以離開
git config --list
git add
會將檔案從工作目錄推到暫存區git commit
會將檔案從暫存區推到本地端儲存庫git push
會將檔案從本地端儲存庫推到遠端儲存庫git pull
會將檔案從遠地端儲存庫同步回工作目錄git fetch
會將檔案從遠地端儲存庫同步回本地端的儲存庫git merge
合併使用 git status
,我們可以查看目前修改了什麼檔案(modified)、刪除什麼檔案(deleted)以及哪些檔案尚未被追蹤(Untracked files)
新增一個 test.txt 檔案,會在 Untracked files 列出
使用 git add 檔案
,我們將檔案或資料夾推到暫存區,若我們再用一次 git status
就會發現有提示一個新檔案(new file)
不建議使用 git add *
,這個動作雖然可以一次把所有檔案加上,但可能會加到你不要的檔案(除非你有確定,不要的檔案類型可以寫 .gitignore )
這裡有 python gitignore 的 template 就不用自己辛苦打文件XD
假設剛剛的檔案反悔不想要放到暫存區或是等一下教的commit要取消, 操作git reset
即可
可以利用 git log
查詢紀錄,也可以直接某一次的版號git reset 號碼(前6碼即可)
接著就可以進行提交 commit, 操作git commit -m "這次提交想要傳達的訊息"
為了讓每次的提交都知道在做什麼,會寫有意義的內容(你或你的同事要看R),記得訊息一定要寫!!
通常我們訊息為了要分別,有一些原則可以參考,會將下列中括號替換成下面的文字
原則文字 | 說明 |
---|---|
feature | 新增功能 |
fix | 修 bug |
refactor | 重構(不是新增功能也不是修 bug ) |
docs | 文件 |
style | 格式 |
revert | 回上一個版本 |
--amend
來修改 git commit 的訊息git commit --amend -m "Hello World!"
git rebase commit_id號碼(6碼即可)
來修改 git commit 的訊息
按 i 進入編輯模式
按 esc 輸入 :wq! 存擋離開
看起來只有簡單改訊息,但大家可以看 commit id 都變了,實際上是修改一個 commit
基本上不建議大家用這招,因為把過去訊息改掉可能會造成錯亂呀!
接著就可以將本地端程式碼推到遠端啦!操作 git push
有人制定了規則讓大家一起遵守
https://nvie.com/posts/a-successful-git-branching-model/
用比較簡單的流程跟大家說明
git branch -a
git remote -v
查看遠端儲存庫的路徑 git branch <branch name>
git checkout -b <branch name>
git branch -d <branch name>
git checkout <branch name>
git merge <branch name>
更詳細的說明:https://gitbook.tw/chapters/branch/merge-branch.html
git checkout origin/develop -b develop
git fetch
git merge origin/master
git pull
git pull --rebase
加上此參數之後會自動做 rebase假設你與同事或專案成員共用開發,你的同事在 develop 分支上先改了一下操作(這邊遠端用 master 示範)
但你的 local 端,沒有先更新到最新,也對同一行程式碼進行編輯修改。你一樣先 git add 、 git commit,當你發現 git push 時候悲劇了!
怎麼會有衝突呢? 這時候什麼東西
衝突發生在不同的分支紀錄要合併時,發現居然不同的狀況。 git 很貼心會把衝突的部分秀出來,這時候好好找你同事聊一聊討論一下要改成什麼吧!把標記刪除再重新推一次就可以解衝突囉!
把標記刪除再重新推一次就可以解衝突囉!
git tag
git tag -a v1.5 -m "my version 1.5 and it add some ..."
git show v1.5
git push origin v1.5
git push origin --tags
你可以直接砍檔案 rm 檔案
把特!你會看到這個
因此你要繼續做 git add 和 commit 的動作
484很麻煩!!所以貼心的 git 有這個功能 git rm 檔案
可以一鍵呵成
跟剛剛一樣,你可以使用 mv 指令換檔名然後再 add commit
但 git 一樣有提供一鍵呵成 git mv 原檔名或路徑 新檔名或路徑
可以一鍵呵成
https://github.com/erik1110/Data-Science/tree/master/09_Git_Tutorial